package com.sinosoft.ebusiness.domain.elementManage;

// 采用工具 Hibernate Tools 3.2.4.GA (sinosoft version) 生成，请勿手工修改。

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.sinosoft.ebusiness.domain.elementManage.GeProductId;
import com.sinosoft.ebusiness.domain.elementManage.GeProductInitEvent;
import com.sinosoft.ebusiness.domain.elementManage.GeProductKindCalcute;
import com.sinosoft.ebusiness.domain.elementManage.GeProductRationTitle;
import com.sinosoft.ebusiness.domain.elementManage.GeProductRisk;
import com.sinosoft.ebusiness.domain.elementManage.GeProductStep;


/**
 * POJO类GeProduct
 */
@Entity
@Table(name = "GE_PRODUCT")
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
public class GeProduct implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4067800373749701166L;

	/** 属性ID */
	private GeProductId id;

	/** 属性productcname */
	private String productcname;

	/** 属性productename */
	private String productename;

	/** 属性producttname */
	private String producttname;

	/** 属性审核状态 */
	private String status;

	/** 属性备注 */
	private String remark;

	/** 属性createcode */
	private String createcode;

	/** 属性创建时间 */
	private Date createTime;

	/** 属性最后修改人 */
	private String updateCode;

	/** 属性invalitime */
	private Date invalitime;

	/** 属性putondate */
	private Date putondate;

	/** 属性putoffdate */
	private Date putoffdate;

	/** 属性生效日期 */
	private Date validDate;
	
	/** 属性是否关于预约协议 */
	private String reservation;

	private BigDecimal minPremium;

	/** 属性是否可以修改产品 基本配置关键信息字段 */
	private String editFlag;

	/** 属性是否已经生成页面 */
	private String generateFlag;

	/** 属性是否已经发布 */
	private String publishFlag;

	private GeProductRationTitle geProductRationTitle;

	/** 属性是否生成保单标志（多个险种时才会有） */
	private String policyMark;

	private GeProductInitEvent geProductInitEvent;

	/** 新增标志 不映射数据库 **/
	private String productPlanFlag;// 是否保费配置

	private String productStepFlag;// 是否页面配置

	private String productConfirmFlag;// 是否配置确认页
	
	private String kindRelationFlag;//是否配置险别关联关系

	/** 属性geProductSteps */
	private List<GeProductStep> geProductSteps = new ArrayList<GeProductStep>(0);

	/** 属性geProductRisks */
	private List<GeProductRisk> geProductRisks = new ArrayList<GeProductRisk>(0);

	/** 属性geProductRisks */
	private List<GeProductKindCalcute> geProductKindCalcutes = new ArrayList<GeProductKindCalcute>(
			0);

	/**
	 * 类GeProduct的默认构造方法
	 */
	public GeProduct() {
	}

	/**
	 * 属性ID的getter方法
	 */
	@EmbeddedId
	@AttributeOverrides({
			@AttributeOverride(name = "productcode", column = @Column(name = "PRODUCTCODE")),
			@AttributeOverride(name = "version", column = @Column(name = "VERSION")) })
	public GeProductId getId() {
		return this.id;
	}

	/**
	 * 属性ID的setter方法
	 */
	public void setId(GeProductId id) {
		this.id = id;
	}

	/**
	 * 属性productcname的getter方法
	 */

	@Column(name = "PRODUCTCNAME")
	public String getProductcname() {
		return this.productcname;
	}

	/**
	 * 属性productcname的setter方法
	 */
	public void setProductcname(String productcname) {
		this.productcname = productcname;
	}

	/**
	 * 属性productename的getter方法
	 */

	@Column(name = "PRODUCTENAME")
	public String getProductename() {
		return this.productename;
	}

	/**
	 * 属性productename的setter方法
	 */
	public void setProductename(String productename) {
		this.productename = productename;
	}

	/**
	 * 属性producttname的getter方法
	 */

	@Column(name = "PRODUCTTNAME")
	public String getProducttname() {
		return this.producttname;
	}

	/**
	 * 属性producttname的setter方法
	 */
	public void setProducttname(String producttname) {
		this.producttname = producttname;
	}

	/**
	 * 属性审核状态的getter方法
	 */

	@Column(name = "STATUS")
	public String getStatus() {
		return this.status;
	}

	/**
	 * 属性审核状态的setter方法
	 */
	public void setStatus(String status) {
		this.status = status;
	}

	/**
	 * 属性备注的getter方法
	 */

	@Column(name = "REMARK")
	public String getRemark() {
		return this.remark;
	}

	/**
	 * 属性备注的setter方法
	 */
	public void setRemark(String remark) {
		this.remark = remark;
	}

	/**
	 * 属性createcode的getter方法
	 */

	@Column(name = "CREATECODE")
	public String getCreatecode() {
		return this.createcode;
	}

	/**
	 * 属性createcode的setter方法
	 */
	public void setCreatecode(String createcode) {
		this.createcode = createcode;
	}

	/**
	 * 属性创建时间的getter方法
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "CREATETIME")
	public Date getCreateTime() {
		return this.createTime;
	}

	/**
	 * 属性创建时间的setter方法
	 */
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	/**
	 * 属性最后修改人的getter方法
	 */

	@Column(name = "UPDATECODE")
	public String getUpdateCode() {
		return this.updateCode;
	}

	/**
	 * 属性最后修改人的setter方法
	 */
	public void setUpdateCode(String updateCode) {
		this.updateCode = updateCode;
	}

	/**
	 * 属性invalitime的getter方法
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "INVALITIME")
	public Date getInvalitime() {
		return this.invalitime;
	}

	/**
	 * 属性invalitime的setter方法
	 */
	public void setInvalitime(Date invalitime) {
		this.invalitime = invalitime;
	}

	/**
	 * 属性putondate的getter方法
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "PUTONDATE")
	public Date getPutondate() {
		return this.putondate;
	}

	/**
	 * 属性putondate的setter方法
	 */
	public void setPutondate(Date putondate) {
		this.putondate = putondate;
	}

	/**
	 * 属性putoffdate的getter方法
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "PUTOFFDATE")
	public Date getPutoffdate() {
		return this.putoffdate;
	}

	/**
	 * 属性putoffdate的setter方法
	 */
	public void setPutoffdate(Date putoffdate) {
		this.putoffdate = putoffdate;
	}

	/**
	 * 属性生效日期的getter方法
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "VALIDDATE")
	public Date getValidDate() {
		return this.validDate;
	}

	/**
	 * 属性生效日期的setter方法
	 */
	public void setValidDate(Date validDate) {
		this.validDate = validDate;
	}

	/**
	 * 属性最后修改人的getter方法
	 */

	@Column(name = "RESERVATION")
	public String getReservation() {
		return this.reservation;
	}

	/**
	 * 属性最后修改人的setter方法
	 */
	public void setReservation(String reservation) {

		this.reservation = reservation;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "geProduct", cascade = CascadeType.ALL)
	public GeProductInitEvent getGeProductInitEvent() {
		return geProductInitEvent;
	}

	public void setGeProductInitEvent(GeProductInitEvent geProductInitEvent) {
		this.geProductInitEvent = geProductInitEvent;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "geProduct", cascade = CascadeType.ALL)
	public GeProductRationTitle getGeProductRationTitle() {
		return geProductRationTitle;
	}

	public void setGeProductRationTitle(
			GeProductRationTitle geProductRationTitle) {
		this.geProductRationTitle = geProductRationTitle;
	}

	/**
	 * 属性geProductSteps的getter方法
	 */
	@JSONField(serialize=false)
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "geProduct")
	public List<GeProductStep> getGeProductSteps() {
		return this.geProductSteps;
	}

	/**
	 * 属性geProductSteps的setter方法
	 */
	public void setGeProductSteps(List<GeProductStep> geProductSteps) {
		this.geProductSteps = geProductSteps;
	}

	/**
	 * 属性geProductRisks的getter方法
	 */
	@JSONField(serialize=false)
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "geProduct")
	public List<GeProductRisk> getGeProductRisks() {
		return this.geProductRisks;
	}

	/**
	 * 属性geProductRisks的setter方法
	 */
	public void setGeProductRisks(List<GeProductRisk> geProductRisks) {
		this.geProductRisks = geProductRisks;
	}

	@JSONField(serialize=false)
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "geProduct")
	public List<GeProductKindCalcute> getGeProductKindCalcutes() {
		return geProductKindCalcutes;
	}

	public void setGeProductKindCalcutes(
			List<GeProductKindCalcute> geProductKindCalcutes) {
		this.geProductKindCalcutes = geProductKindCalcutes;
	}

	@Column(name = "MINPREMIUM")
	public BigDecimal getMinPremium() {
		return minPremium;
	}

	public void setMinPremium(BigDecimal minPremium) {
		this.minPremium = minPremium;
	}

	@Column(name = "EDITFLAG")
	public String getEditFlag() {
		return editFlag;
	}

	public void setEditFlag(String editFlag) {
		this.editFlag = editFlag;
	}

	@Column(name = "POLICYMARK")
	public String getPolicyMark() {
		return policyMark;
	}

	public void setPolicyMark(String policyMark) {
		this.policyMark = policyMark;
	}

	@Column(name = "GENERATEFLAG")
	public String getGenerateFlag() {
		return generateFlag;
	}

	public void setGenerateFlag(String generateFlag) {
		this.generateFlag = generateFlag;
	}

	@Column(name = "PUBLISHFLAG")
	public String getPublishFlag() {
		return publishFlag;
	}

	public void setPublishFlag(String publishFlag) {
		this.publishFlag = publishFlag;
	}

	@Transient
	public String getProductPlanFlag() {
		return productPlanFlag;
	}

	public void setProductPlanFlag(String productPlanFlag) {
		this.productPlanFlag = productPlanFlag;
	}

	@Transient
	public String getProductStepFlag() {
		return productStepFlag;
	}

	public void setProductStepFlag(String productStepFlag) {
		this.productStepFlag = productStepFlag;
	}

	@Transient
	public String getProductConfirmFlag() {
		return productConfirmFlag;
	}

	public void setProductConfirmFlag(String productConfirmFlag) {
		this.productConfirmFlag = productConfirmFlag;
	}

	@Transient
	public String getKindRelationFlag() {
		return kindRelationFlag;
	}

	public void setKindRelationFlag(String kindRelationFlag) {
		this.kindRelationFlag = kindRelationFlag;
	}
	
	
}
